Many statically typed languages like C and C++ store double-precision floating-point values (or “double values”) in memory in a compact and efficient “raw” format, for example, with each double value occupying 64 bits of memory (e.g., using the IEEE 754 64-bit format). Because the types of values and therefore their representation are known when a program is compiled in these languages, the compiler can generate efficient code that loads, stores and manipulates double values in memory. In a dynamically-typed language (e.g., JavaScript), the type of a value is often not known until runtime. This makes it difficult for a language implementation to use the simple and efficient “raw” storage format for double values.